package com.iwedia.service.overlay;
import android.content.Context;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Parcel;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.VideoView;
import com.iwedia.service.R;
public class OverlayPlayer {
private final static String TAG = "OverlayPlayer";
private final static int PARA_SCALE_DISP_WINDOW = (0x100);
private final static int PARA_GFX_DISP_SURFACE = (0x101);
public final static int NONE_DISPLAY_MODE = 0;
public final static int PIP_DISPLAY_MODE = 1;
public final static int PAP_DISPLAY_MODE = 2;
private Context mContext;
private RelativeLayout mOverlayMain;
private RelativeLayout mOverlayLayer;
private VideoView mVideoView = null;
int video_x = 10;
int video_y = 50;
int video_w = 640;
int video_h = 480;
public OverlayPlayer(Context ctx) {
mContext = ctx;
Log.d(TAG, "STARTING OVERLAY PLAYER...");
mOverlayMain = (RelativeLayout) View.inflate(mContext,
R.layout.overlay_player, null);
mOverlayMain.setBackgroundColor(Color.TRANSPARENT);
final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
PixelFormat.TRANSPARENT);
lp.gravity = Gravity.NO_GRAVITY;
lp.setTitle("OverlayPlayerMain");
lp.packageName = mContext.getPackageName();
// WindowManagerImpl.getDefault().addView(mOverlayMain, lp);
mOverlayLayer = (RelativeLayout) mOverlayMain
.findViewById(R.id.overlayPlayerLayout);
}
public void start(String play_uri, String video_size) {
if (video_size != null) {
String dim[] = video_size.split(",");
if (dim.length == 4) {
try {
video_x = Integer.parseInt(dim[0]);
video_y = Integer.parseInt(dim[1]);
video_w = Integer.parseInt(dim[2]);
video_h = Integer.parseInt(dim[3]);
} catch (Exception e) {
Log.e(TAG, "Error parsing video size: " + video_size);
e.printStackTrace();
}
} else {
Log.e(TAG, "Invalid video size: " + video_size);
}
Log.d(TAG, "Video size: " + video_x + ", " + video_y + ", "
+ video_w + ", " + video_h);
}
createVideoView();
if (play_uri != null) {
mVideoView.setVideoURI(Uri.parse(play_uri));
}
}
public void stop() {
if (mVideoView != null) {
mVideoView.stopPlayback();
}
// WindowManagerImpl.getDefault().removeView(mOverlayMain);
}
public void prepareSize(int x, int y, int w, int h) {
video_x = x;
video_y = y;
video_w = w;
video_h = h;
}
private void clearVideoView() {
mVideoView = null;
mOverlayLayer.removeAllViews();
}
private void createVideoView() {
if (mVideoView != null) {
clearVideoView();
}
mVideoView = new VideoView(mContext);
mVideoView.setLayoutParams(new RelativeLayout.LayoutParams(video_w,
video_h));
mOverlayLayer.setX(video_x);
mOverlayLayer.setY(video_y);
mVideoView.setVisibility(View.VISIBLE);
mVideoView.setZOrderOnTop(true);
mVideoView.setZOrderMediaOverlay(false);
mVideoView.invalidate();
mOverlayLayer.addView(mVideoView);
// borders!
mOverlayLayer.setLayoutParams(new RelativeLayout.LayoutParams(
video_w + 10, video_h + 10));
mVideoView.setX(5);
mVideoView.setY(5);
mOverlayLayer.requestLayout();
mVideoView.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "onPrepare");
mVideoView.start();
Parcel request = Parcel.obtain();
request.writeInt(video_x);
request.writeInt(video_y);
request.writeInt(video_w);
request.writeInt(video_h);
// mp.setParameter(PARA_SCALE_DISP_WINDOW, request);
}
});
}
}